
#include "AliUtil.h"
string trim(const string& str) {
    string::size_type pos = str.find_first_not_of(' ');
    if (pos == string::npos) {
        return str;
    }
    string::size_type pos2 = str.find_last_not_of(' ');
    if (pos2 != string::npos) {
        return str.substr(pos, pos2 - pos + 1);
    }
    return str.substr(pos);
}

int split(const string& str, vector<string>& ret_, string sep) {
    if (str.empty()) {
        return 0;
    }

    string tmp;
    string::size_type pos_begin = str.find_first_not_of(sep);
    string::size_type comma_pos = 0;

    while (pos_begin != string::npos) {
        comma_pos = str.find(sep, pos_begin);
        if (comma_pos != string::npos) {
            tmp = str.substr(pos_begin, comma_pos - pos_begin);
            pos_begin = comma_pos + sep.length();
        } else {
            tmp = str.substr(pos_begin);
            pos_begin = comma_pos;
        }

        if (!tmp.empty()) {
            ret_.push_back(tmp);
            tmp.clear();
        }
    }
    return 0;
}


int split_to_key_value(const string& str, vector<string>& ret_, string sep) {
    if (str.empty()) {
        return 0;
    }

    string tmp;
    string key;
    string value;
    string::size_type pos_begin = str.find_first_not_of(sep);
    string::size_type comma_pos = 0;

    comma_pos = str.find(sep, pos_begin);
    if (comma_pos != string::npos) {
        key = str.substr(pos_begin, comma_pos - pos_begin);
        value = str.substr(comma_pos+sep.length(), (str.size()-comma_pos-sep.length()));
    }

    if ((!key.empty()) && (!value.empty())) {
        ret_.push_back(key);
        ret_.push_back(value);
    }
    
    return 0;
}



string replace(const string& str, const string& src, const string& dest) {
    string ret;
    string::size_type pos_begin = 0;
    string::size_type pos = str.find(src);
    while (pos != string::npos) {
        ;
        ret.append(str.data() + pos_begin, pos - pos_begin);
        ret += dest;
        pos_begin = pos + 1;
        pos = str.find(src, pos_begin);
    }
    if (pos_begin < str.length()) {
        ret.append(str.begin() + pos_begin, str.end());
    }
    return ret;
}
size_t sys_read_link(const char *path, char *link, size_t size){
    return readlink(path,link,size);
}

// 把一个无符号八进制数字构成的字符串转换为十进制整数
int atoo(const char* p)
{
    int n = 0;

    while (*p != '\0')
    {
        n = n * 8 + *p - '0';
        p++;
    }
	
    return n;
}

